package javase.javase01.exercise04;

import java.io.File;
import java.io.IOException;

/**
 * @author: Gan
 * @date 2021/4/15 0015 19:42
 * @description: File练习题
 * 递归删除目录
 * 目录结构为如下(尽量不要在c盘中测试)
 * firstLevel目录中，包含一个secondLevel目录和a1.txt和b1.java文件
 * secondLevel目录中包含dir1和dir2两个目录，和a2.txt和b2.java文件
 * dir1目录中包含a3.txt和b3.java文件
 * dir2目录是一个空目录
 * 要求删除firstLevel目录
 * 思路：
 * - 获取目录的下的所有File对象（包括文件和文件夹）
 * - 判断，如果是一个空目录或者file对象不是一个目录而是文件
 * - 直接删除
 * - 程序执行到这里，那么一定是一个目录，且不是空目录
 * - 遍历获取的file数组
 * - 如果这个file对象仍然是一个目录，递归删除该目录
 * - 如果这个file对象是文件，直接删除
 * - 最后不要忘记删除已经是空目录的当前目录
 **/
public class DemoFile {
    public static void main(String[] args) throws IOException {
        //创建各级文件夹
        //System.out.println(System.getProperty("user.dir"));
        File f1 = new File("D:\\firstLevel\\secondLevel\\dir2");
        f1.mkdirs();
        File f2 = new File("D:\\firstLevel\\secondLevel\\dir1");
        f2.mkdirs();
        File f3 = new File("..\\firstLevel\\secondLevel\\dir1\\a3.txt");
        f3.createNewFile();
        File f4 = new File("..\\firstLevel\\secondLevel\\dir1\\b3.java");
        f4.createNewFile();
        File f5 = new File("..\\firstLevel\\a1.txt");
        f5.createNewFile();
        File f6 = new File("..\\firstLevel\\b1.java");
        f6.createNewFile();
        File f7 = new File("..\\firstLevel\\secondLevel\\a2.txt");
        f7.createNewFile();
        File f8 = new File("..\\firstLevel\\secondLevel\\b2.java");
        f8.createNewFile();
        //获取目录的下的所有File对象（包括文件和文件夹）
        File f = new File("D:\\firstLevel");
        File[] files = f.listFiles();
        for (File file : files) {
            System.out.println(file);
        }
        //deleteFile(f);
        System.out.println("删除成功！");
    }

    private static void deleteFile(File f) {
        //获取当前目录下所有的文件与目录
        File[] files = f.listFiles();
        //如果不是目录而是文件或者空目录，直接删除
        if (files == null || files.length == 0) {
            f.delete();
            System.out.println(f.getName() + "删除成功");
            return;
        }
       for (int i = 0; i < files.length; i++) {
            if (files[i].isDirectory()) {
                //若file对象表示的是目录则地柜删除子目录
                deleteFile(files[i]);
            } else {
                //不是目录而是文件 删
                files[i].delete();
                System.out.println(files[i].getName() + "删除成功");
            }
       }
        //删除完所有firstLevel内文件 也把它删掉
        f.delete();
        System.out.println(f.getName()+"也被删掉了");
    }
}
